포인터와 배열

✒️ 2025-05-15 15:54 내용 수정

수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리


  1. (*포인터명)[]은 2차원 배열을 가리키는 배열 포인터
  2. * 포인터명[]은 포인터 변수를 모아 놓은 포인터 배열
타입 (*포인터명)[열의길이]; // 배열 포인터
타입* 포인터명[행의길이]; // 포인트 배열

포인터 배열

배열 요소로 포인터 변수를 가지는 배열

타입* 배열명[행의길이] = {&변수명1, &변수명2, ...};
#include <stdio.h>

int main(void)
{
    int a = 1, b = 2, c = 3;
    int* arr[] = {&a, &b, &c}; // 포인터 배열

    int len = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < len; i++) 
    {
        printf("arr[%d] 요소가 가리키는 주소: %p, 저장된 값 : %d\n", 
	        i, (void*)arr[i], *arr[i]);
    }
    return 0;
}
arr[0] 요소가 가리키는 주소: 00000000005ffe94, 저장된 값 : 1
arr[1] 요소가 가리키는 주소: 00000000005ffe90, 저장된 값 : 2
arr[2] 요소가 가리키는 주소: 00000000005ffe8c, 저장된 값 : 3

배열 포인터

배열을 가리킬 수 있는 포인터

타입 배열명[행의길이][열의길이];
타입 (*포인터명)[열의길이];

int arr[2][3];
int (*pArr)[3];
#include <stdio.h>

int main(void)
{
    int arr[2][3] ={
        {1, 2, 3},
        {4, 5, 6}
    };

    printf("arr[0][0]에 저장된 데이터 : %d\n", *arr[0]);
    printf("arr[1][0]에 저장된 데이터 : %d\n", *arr[1]);

    int (*pArr)[3] = arr; // arr[0]을 참조
    printf("arr[1][1] : %d\n", arr[1][1]); // 배열 이름 참조
    printf("pArr[1][1]의 참조 결과 : %d\n", pArr[1][1]); // 배열 포인터 참조
    return 0;
}
arr[0][0]에 저장된 데이터 : 1
arr[1][0]에 저장된 데이터 : 4
arr[1][1] : 5
pArr[1][1]의 참조 결과 : 5